package cn.qingyun.gis.modules.scenes.service;

import cn.qingyun.gis.modules.baogan.vo.AggRequest;
import cn.qingyun.gis.modules.baogan.vo.MapAggResponse;
import cn.qingyun.gis.modules.baogan.vo.PoiScenarioTypeResponse;
import cn.qingyun.gis.modules.baogan.vo.ScenarioCountResponse;
import cn.qingyun.gis.modules.baogan.vo.request.DataQueryRequest;
import cn.qingyun.gis.modules.baogan.vo.response.DataResponse;
import cn.qingyun.gis.modules.baogan.vo.request.SceneRequest;
import cn.qingyun.gis.modules.baogan.vo.response.EnterpriseResponse;
import cn.qingyun.gis.modules.baogan.vo.response.MGridDetailRes;
import cn.qingyun.gis.modules.baogan.vo.response.PointDetailRes;
import cn.qingyun.gis.modules.scenes.entity.PoiScenario;
import cn.qingyun.gis.modules.scenes.request.*;
import cn.qingyun.gis.modules.scenes.response.*;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.baomidou.mybatisplus.extension.service.IService;

import java.util.List;

/**
 * <p>
 * 服务类
 * </p>
 *
 * @author guest
 * @since 2024-04-27
 */
public interface IPoiScenarioService extends IService<PoiScenario> {

    /**
     * 通过id查询任务详情
     *
     * @param id
     * @return
     */
    TaskDetailResponse queryTaskDetailById(String id);

    /**
     * 后台---poi信息详情查看
     *
     * @param poiInfoDetailRequest
     * @return
     */
    PoiInfoDetailResponse queryPoiInfoDetailById(PoiInfoDetailRequest poiInfoDetailRequest, String table);

    /**
     * 通过gdId查询地址详情
     *
     * @param gdId
     * @return
     */
    AddressResponse queryAddressDetailByGdId(String gdId);

    /**
     * 分页获取 场景攻坚随访信息
     */
    List<ScenesExportDto> selectDetailPage(long pageNum, long pageSize, String code, int level);


    /**
     * 根据区县编码 获取地市级别场景攻坚随访信息
     */
    List<ScenesExportDto> selectCityDetail(String disCode);


    /**
     * 根据编码等获取场景攻坚随访信息
     */
    List<ScenesPageDto> selectDetailCondPage(int startIndex, int batchSize, String code, Integer level, String kwPhone, Integer kwState);

    /**
     * 获取摸排列表后台查询--改造
     *
     * @return
     */
    List<ScenesPageDto> selectDetailCondPageNew(PoiChannelRequest poiChannelRequest, List<String> table, Integer level);

    /**
     * 获取摸排列表后台查询--改造-没有分页
     *
     * @param poiChannelRequest
     * @param tables
     * @param level
     * @return
     */
    List<ScenesPageDto> selectDetailCondNewSub(PoiChannelRequest poiChannelRequest, List<String> tables, Integer level);

    /**
     * 根据随访状态等获取数量信息
     */
    int selectDetailCount(String code, Integer level, String kwPhone, Integer kwState);

    /**
     * 计算全量摸排数据个数
     *
     * @param poiChannelRequest
     * @param table
     * @param level
     * @return
     */
    int selectDetailCountNew(PoiChannelRequest poiChannelRequest, String table, Integer level);

    /**
     * 首页-统计数据个数
     *
     * @param poiCountRequest
     * @param table
     * @param level
     * @return
     */
    List<PoiSceneCount> selectSceneCount(PoiCountRequest poiCountRequest, String table, Integer level);

    /**
     * 查询宽带客户数
     *
     * @param poiCountRequest
     * @param table
     * @param level
     * @return
     */
    Integer selectKdClientTotal(PoiCountRequest poiCountRequest, String table, Integer level);

    /**
     * 六大场景个数统计
     *
     * @param poiCountRequest
     * @param table
     * @param level
     * @return
     */
    List<PoiSceneCount> selectSceneCountSub(PoiCountRequest poiCountRequest, String table, Integer level);

    /**
     * 查询我的摸排个数
     *
     * @param poiCountRequest
     * @param table
     * @param level
     * @return
     */
    Integer selectMyselfNumber(PoiCountRequest poiCountRequest, String table, Integer level);

    /**
     * 具体场景信息个数统计
     *
     * @param poiCountRequest
     * @param table
     * @param level
     * @return
     */
    List<PoiSceneCount> selectSpecificSceneCount(PoiCountRequest poiCountRequest, String table, Integer level);

    /**
     * 查询具体场景建筑数、企业数、已随访、未随访个数
     *
     * @param poiCountRequest
     * @param table
     * @param level
     * @return
     */
    List<PoiSceneCount> selectSpecificSceneKwPoiCount(PoiCountRequest poiCountRequest, String table, Integer level);

    /**
     * index/query首页搜索接口
     *
     * @param request
     * @param code
     * @param table   表明
     * @return
     */
    List<IndexAroundResponse> poiIndexQuery(IndexAroundNewRequest request, String table, Integer Level, String code);

    /**
     * 建筑列表 宽带渗透率+摸排情况 个数统计
     *
     * @param poiIds
     * @return
     */
    List<PoiSceneCount> selectBuildCount(List<String> poiIds);

    /**
     * poi-勘误记录查询
     *
     * @param id
     * @param table
     * @return
     */
    List<KwPeopleRecord> kwPeopleRecordSelect(String id, String table, String type);

    /**
     * 查询聚合得数据
     *
     * @param request
     * @return
     */
    List<TogetherResponse> selectTogetherData(IndexTogetherRequest request, Integer level);

    /**
     * 入住企业查询
     *
     * @param poiFiveIPage
     * @param request
     * @return
     */
    IPage<PoiListResponse> selectPoiSettledPage(IPage<PoiScenario> poiFiveIPage, PoiPageRequest request);

    /**
     * 楼宇明细查询
     *
     * @param request
     * @return
     */
    List<BuildingDetailResponse> buildingDetailSelect(BuildDetailRequest request);

    /**
     * 新增或者更新poi数据
     *
     * @param request
     */
    void saveOrUpdatePoi(PoiScenarioRequest request);

    /**
     * poi删除
     *
     * @param request
     */
    void poiDelete(PoiDeleteRequest request);

    /**
     * poi季度更新数据
     */
    void poiQuarterUpdate();

    /**
     * poi季度更新数据--新
     */
    void poiQuarterUpdateNew();

    /**
     * 获取与该点最近的poi数据
     *
     * @param points
     * @return
     */
    PoiScenario getNearestPoiData(String points);

    /**
     * 更新建筑和企业摸排随访状态
     */
    void updateKwState(String id, String type, String regionCityCode, Integer isBuild);

    /**
     * 取网格变化的数据
     * @param id
     * @return
     */
    List<PoiScenario> selectChangedPoiData(String id,String regionCityCode);

    /**
     * 取微网格变化的数据
     * @param id
     * @param regionCityCode
     * @return
     */
    List<PoiScenario> selectMircoChangedPoiData(String id,String regionCityCode);

    /**
     * 聚合查询
     * @param request
     * @return
     */
    List<MapAggResponse> selectAggList(AggRequest request);

    /**
     * 获取六大场景个数统计
     * @param code 编码
     * @param flag 看管标识
     * @return
     */
    List<ScenarioCountResponse> aggScenario(String code,Integer flag);

    /**
     * 查询场景类型列表
     * @return
     */
    Page<PoiScenarioTypeResponse> selectSceneList(SceneRequest request);

    /**
     * 查询圈画下的数据
     * @param id
     * @return
     */
    List<PoiScenarioTypeResponse> queryCircleData(String id);

    /**
     * 查询微网格详情
     *
     * @param microGridCode
     * @param id
     * @param types
     * @return
     */
    MGridDetailRes selectMicroDetail(String microGridCode, String id, List<String> types);

    /**
     * 查询微网格企业列表
     *
     * @param microGridCode
     * @param id
     * @return
     */
    List<EnterpriseResponse> selectMicroEnterpriseList(String microGridCode, String id);

    /**
     * 查询point详情
     *
     * @param microGridCode
     * @param id
     * @return
     */
    PointDetailRes selectPointDetail(String microGridCode, String id);
    /**
     * 查询基础poi数据
     * @param request
     * @param level
     * @return
     */
    List<DataResponse>  selectPoiData(DataQueryRequest request,Integer level);

    /**
     * 查询具体微网格下的点数据
     * @param code
     * @return
     */
    List<DataResponse>  selectPoiDataByMicroCode(String code,String regionCityCode,List<String> types);

}
